#include <stdio.h>
#include <unistd.h>

#include <time.h>
#include <stdlib.h>

#include <sys/wait.h>
#include <string.h>


int main(int argc, char const *argv[])
{
    // 1. 父进程中创建管道
    int fd[2]; // 管道FD
    int ret = pipe(fd);
    if(ret != 0){
        perror("pipe");
        return -1;
    }

    // 2. 创建子进程，读数据
    if(fork() == 0){
        close(fd[1]);
        char buf[128] = "";
        while(1){
            bzero(buf, 128);
            read(fd[0], buf, 128);
            if(strncmp(buf, "exit", 4) == 0) break;

            // 将数据转成全大小
            char *p = buf;
            while(*p){
                if(*p >='a' && *p <='z'  ) {
                    *p = *p - 32;
                }
                p++;
            }
            printf("--> %s\n", buf);
        }
        close(fd[0]);  // 关闭管道写端
        _exit(0);
    }

    // 父进程写数据
    close(fd[0]);
    // 从键盘输入数据并写入到管道中
    char buf[128] = "";
    while(1){
        bzero(buf, 128); // 清空
        fgets(buf, 128, stdin); // 等待接收数据
        buf[strlen(buf) - 1] = 0;  // 去掉 \n

        // 写入管道
        write(fd[1], buf, strlen(buf));
        if(strncmp(buf, "exit", 4) == 0) break;
    }
    wait(NULL); // 回收子进程
    // 关闭管道的读端
    close(fd[1]);
    return 0;
}
